Java NIO (New I/O) হল Java 1.4-এ পরিচিত একটি I/O লাইব্রেরি যা I/O অপারেশনগুলিকে আরও দ্রুত এবং কার্যকরী করতে ডিজাইন করা হয়েছে। NIO-এর প্রধান সুবিধাগুলি হল ব্যাচ প্রসেসিং, ব্লকিং না হওয়া এবং স্ট্রীমিং ডেটার সাথে আরও দক্ষ কাজ করার ক্ষমতা।
Java NIO মূলত buffer, channel, selector, path, files, buffers, charsets, file channels ইত্যাদি ধারণা ব্যবহার করে I/O অপারেশনগুলি দ্রুত এবং কার্যকরভাবে সম্পাদন করতে সাহায্য করে। NIO-এর সবচেয়ে বড় সুবিধা হল এর non-blocking I/O ক্ষমতা, যা মাল্টিথ্রেডিং এবং বড় ডেটাসেট প্রসেসিংয়ের জন্য উপকারী।
ByteBuffer
, CharBuffer
, IntBuffer
, ইত্যাদি ফর্মে থাকে।FileChannel
, SocketChannel
, DatagramChannel
, ServerSocketChannel
।java.nio.file
প্যাকেজের সাথে Path এবং Files ক্লাসগুলি ফাইল পরিচালনা, ফাইলের পাথ এবং ফাইলের তথ্য পাওয়ার জন্য ব্যবহৃত হয়।Paths.get()
ব্যবহার করে ফাইল পাথ তৈরি এবং ফাইল অপারেশন করতে পারে।import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.io.IOException;
public class FileChannelExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.txt");
FileChannel channel = fis.getChannel()) {
// একটি buffer তৈরি
ByteBuffer buffer = ByteBuffer.allocate(1024);
// চ্যানেল থেকে ডেটা পড়া
int bytesRead = channel.read(buffer);
while (bytesRead != -1) {
buffer.flip(); // buffer থেকে ডেটা পড়ার জন্য প্রস্তুত করা
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get()); // buffer থেকে ডেটা বের করা
}
buffer.clear(); // buffer পুনরায় ব্যবহারযোগ্য করার জন্য পরিষ্কার করা
bytesRead = channel.read(buffer);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileChannel
থেকে ByteBuffer
ব্যবহার করে ফাইলের ডেটা পড়া হচ্ছে। প্রথমে একটি বাফার তৈরি করা হয়েছে, পরে চ্যানেল থেকে ডেটা পড়া হচ্ছে এবং তা কনসোলে প্রিন্ট করা হচ্ছে।import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.io.IOException;
public class FileChannelWriteExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output.txt");
FileChannel channel = fos.getChannel()) {
String message = "Hello, Java NIO!";
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.clear();
buffer.put(message.getBytes()); // message কে বাইটে রূপান্তর করা
buffer.flip();
channel.write(buffer); // ফাইলে ডেটা লেখা
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileChannel
ব্যবহার করে ফাইলে ডেটা লেখা হচ্ছে। প্রথমে বাইট বাফারে message
স্ট্রিংটি লিখে, তারপর চ্যানেল ব্যবহার করে তা output.txt
ফাইলে লেখা হচ্ছে।import java.nio.file.*;
public class FilesAndPathExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
// ফাইলের আকার
long fileSize = Files.size(path);
System.out.println("File Size: " + fileSize + " bytes");
// ফাইলের অনুমতি চেক করা
boolean isReadable = Files.isReadable(path);
boolean isWritable = Files.isWritable(path);
System.out.println("Is Readable: " + isReadable);
System.out.println("Is Writable: " + isWritable);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
Path
এবং Files
API ব্যবহার করে ফাইলের আকার এবং তার অনুমতি যাচাই করা হচ্ছে। Files.size()
মেথড ফাইলের আকার এবং Files.isReadable()
, Files.isWritable()
মেথড ফাইলের পাঠযোগ্যতা ও লেখার অনুমতি চেক করছে।Java NIO (New I/O) একটি শক্তিশালী এবং কার্যকর I/O লাইব্রেরি, যা high-performance I/O, non-blocking I/O, এবং file manipulation এর জন্য ব্যবহৃত হয়। Buffers
, Channels
, Selectors
এবং Path/Files
API এর মাধ্যমে ডেটা পড়া এবং লেখা আরও দ্রুত এবং কার্যকরী হয়।
যদি আপনার অ্যাপ্লিকেশনে বড় ডেটা বা non-blocking I/O এর প্রয়োজন হয়, তবে NIO হল একটি আদর্শ পছন্দ। NIO ব্যবহার করে আপনি multiple channels এবং parallel processing সহজে করতে পারবেন, যা আপনার I/O অপারেশনগুলির কার্যকারিতা বাড়ায়।
Java NIO (New I/O) হল Java-এর একটি উন্নত I/O API, যা Java 1.4 সংস্করণে চালু করা হয়। এটি I/O অপারেশন গুলি দ্রুত এবং কার্যকরভাবে পরিচালনা করার জন্য ডিজাইন করা হয়েছে। Java NIO সাধারণত বড় ডেটা সেট এবং ফাইল/নেটওয়ার্ক I/O অপারেশনগুলোর জন্য ব্যবহৃত হয়, যেখানে উচ্চ কার্যকারিতা এবং কম বিলম্বের প্রয়োজন হয়। Java NIO আরও কার্যকরী, স্কেলেবল এবং থ্রেড-সেফ তুলনায় পুরোনো Java I/O (Stream-based) API এর তুলনায়।
Java NIO তিনটি মূল উপাদান নিয়ে গঠিত:
ByteBuffer
, CharBuffer
, IntBuffer
, ইত্যাদি।FileChannel
, SocketChannel
, DatagramChannel
, ইত্যাদি।import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class FileChannelExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "r");
FileChannel fileChannel = file.getChannel()) {
ByteBuffer buffer = ByteBuffer.allocate(1024);
fileChannel.read(buffer);
// Buffers' position should be reset to read data
buffer.flip();
// Print the data
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileChannel
ব্যবহার করে ফাইল থেকে ডেটা পড়া হচ্ছে।flip()
মেথড দিয়ে পড়া শুরু হচ্ছে।import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class FileChannelWriteExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("exampleOutput.txt", "rw");
FileChannel fileChannel = file.getChannel()) {
String data = "Hello, Java NIO!";
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.clear();
buffer.put(data.getBytes());
// Write the data to the file
buffer.flip();
fileChannel.write(buffer);
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileChannel
ব্যবহার করে ByteBuffer তে ডেটা স্টোর করা হচ্ছে এবং তারপর ফাইল এ লেখা হচ্ছে।Java NIO (New I/O) হল একটি উন্নত I/O API, যা বড় ডেটা, নেটওয়ার্ক এবং ফাইল I/O অপারেশনগুলির জন্য আরও কার্যকরী এবং দ্রুত পদ্ধতি প্রদান করে। এটি non-blocking I/O সাপোর্ট করে, যা multithreading এবং high-performance applications এর জন্য উপযুক্ত। Java NIO এর মূল উপাদানগুলি হল Buffers, Channels, এবং Selectors, যা একাধিক স্ট্রিম অপারেশন একসাথে পরিচালনা করতে সাহায্য করে।
Java NIO বেশিরভাগ ক্ষেত্রে ইন্টারঅ্যাকটিভ এবং স্কেলেবল অ্যাপ্লিকেশন তৈরিতে ব্যবহৃত হয় এবং এটি নেটওয়ার্ক সার্ভার, ফাইল প্রসেসিং এবং বড় ডেটা অ্যাপ্লিকেশনগুলির জন্য অপরিহার্য।
Java NIO (New Input/Output) হলো Java I/O API-র একটি আপডেটেড সংস্করণ, যা Java 1.4 তে প্রবর্তিত হয়েছিল। এটি বিশেষভাবে বৃহৎ ডেটা সেট এবং ব্রোডকাস্ট/কমপ্লেক্স ডেটা প্রসেস করার জন্য উন্নত ফিচার এবং কার্যকারিতা প্রদান করে। NIO-এর মাধ্যমে ব্লকিং I/O অপারেশন এবং বাফারিং, চ্যানেল ব্যবহার করে নন-ব্লকিং I/O অপারেশন করা সম্ভব।
NIO মূলত Byte Channels, Buffers, Selectors এবং Charsets-এর মাধ্যমে ডেটা পরিচালনা করার জন্য ব্যবহৃত হয়। এটি স্ট্রিম ভিত্তিক ট্রান্সফার এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য কার্যকরী, এবং বড় আকারের ডেটা হ্যান্ডলিংয়ের জন্য পারফরম্যান্স উন্নত করে।
Java NIO-র মূল উপাদানগুলোর মধ্যে রয়েছে:
Buffer
হল একটি ডেটা স্টোরেজ যা primitive types (যেমন byte
, char
, int
, float
ইত্যাদি) ডেটা রাখে। এটি একটি অ্যারে সিস্টেমের মত কাজ করে এবং স্ট্রিম বা চ্যানেলগুলির মাধ্যমে ডেটা প্রক্রিয়া করার সময় ব্যবহৃত হয়।Channel
হল একটি I/O অপারেশন যেখানে ডেটা চিত্রিত হয় এবং বাইনারি বা টেক্সট ডেটার স্ট্রিম প্যাসেজ সম্পাদন করতে ব্যবহৃত হয়। Channel
NIO-এর নতুন ধারণা, যা স্ট্রিমের সাথে তুলনায় আরও শক্তিশালী এবং দক্ষ।Selector
ক্লাস NIO-তে নন-ব্লকিং I/O অপারেশন ব্যবহারের জন্য তৈরি করা হয়েছে। এটি একটি multiplexing মেকানিজম প্রদান করে, যার মাধ্যমে একাধিক চ্যানেল থেকে নন-ব্লকিং I/O পড়া এবং লেখা সম্ভব হয়।Charset
একটি ক্লাস যা টেক্সট ডেটা এনকোড/ডিকোড করার জন্য ব্যবহৃত হয়। এটি ASCII বা Unicode রূপান্তর করতে সক্ষম, যা টেক্সট ডেটার স্ট্রিমিংয়ের সময় সাহায্য করে।Buffer হলো একটি ডেটা কন্টেইনার, যেখানে আপনি ডেটা স্টোর বা রিড করতে পারেন। NIO-তে ডেটা শুধুমাত্র Buffer এ রাখা হয় এবং তারপর চ্যানেলগুলির মাধ্যমে প্রসেস করা হয়। Java NIO-তে Buffer-এর বিভিন্ন ধরনের রয়েছে যেমন:
ByteBuffer সবচেয়ে বেশি ব্যবহৃত এবং এটি বাইনারি ডেটা স্টোর করার জন্য ব্যবহৃত হয়।
Channel হলো একটি অগ্রগতির ইউনিট যা ডেটা পড়া এবং লেখা পরিচালনা করে। NIO চ্যানেল সাধারণত non-blocking হয় এবং FileChannel
, SocketChannel
এবং DatagramChannel
এর মতো ক্লাসের মাধ্যমে ডেটা পাঠানো এবং গ্রহণ করা যায়। এগুলো blocking এবং non-blocking মোডে কাজ করতে সক্ষম।
Selector NIO-এর non-blocking I/O অপারেশন পরিচালনা করতে ব্যবহৃত হয়। এটি একাধিক চ্যানেল থেকে ডেটা পড়ার জন্য ব্যবহার করা হয়, তবে একটি থ্রেডের মাধ্যমে। Selectors বিভিন্ন I/O operations কে একত্রিত করে এবং সম্পন্ন হওয়ার পরে চেক করে, এটি polling অথবা selecting পদ্ধতির মাধ্যমে কাজ করে।
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.io.IOException;
public class NIOExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
FileChannel fileChannel = fis.getChannel()) {
// ByteBuffer তৈরি
ByteBuffer buffer = ByteBuffer.allocate(1024);
// ফাইল থেকে ডেটা পড়া
int bytesRead = fileChannel.read(buffer);
while (bytesRead != -1) {
System.out.println("Read " + bytesRead);
buffer.flip(); // Bufffer-এর মধ্যে ডেটা রিড করার জন্য প্রস্তুত
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get()); // ডেটা আউটপুটে প্রিন্ট
}
buffer.clear(); // Bufffer রিসেট করা
bytesRead = fileChannel.read(buffer);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
import java.nio.channels.*;
import java.nio.*;
import java.net.*;
import java.io.IOException;
public class SelectorExample {
public static void main(String[] args) {
try {
// সার্ভার সকেট তৈরি
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.bind(new InetSocketAddress(5000));
serverSocketChannel.configureBlocking(false); // non-blocking mode
// Selector তৈরি
Selector selector = Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
// Ready channels চেক করা
selector.select();
for (SelectionKey key : selector.selectedKeys()) {
if (key.isAcceptable()) {
// ক্লায়েন্ট কানেকশন গ্রহণ
SocketChannel clientChannel = serverSocketChannel.accept();
clientChannel.configureBlocking(false);
clientChannel.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
// ডেটা পড়া
SocketChannel clientChannel = (SocketChannel) key.channel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
int bytesRead = clientChannel.read(buffer);
if (bytesRead == -1) {
clientChannel.close();
} else {
buffer.flip();
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get());
}
}
}
}
selector.selectedKeys().clear();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
Java NIO হল একটি শক্তিশালী I/O প্রযুক্তি যা বড় ডেটা সেটের সাথে কাজ করার জন্য ব্যবহৃত হয়। এটি Buffers, Channels, Selectors এবং Charsets ব্যবহার করে ডেটা পড়া, লেখা এবং প্রসেসিংকে আরও দ্রুত ও কার্যকরী করে তোলে। NIO মূলত non-blocking I/O সমর্থন করে, যা সিস্টেমের কর্মক্ষমতা উন্নত করতে সাহায্য করে এবং সিঙ্ক্রোনাস I/O-এর চেয়ে অধিক কার্যকর।
Java NIO (New I/O), Java 1.4 এ চালু হওয়া একটি API, যা পারফরম্যান্স ও সক্ষমতা উন্নত করতে এবং I/O অপারেশনগুলোকে আরও কার্যকরী ও নমনীয় করার জন্য ডিজাইন করা হয়েছে। NIO একটি non-blocking I/O মডেল ব্যবহার করে যা buffers, channels, এবং selectors নামক তিনটি প্রধান কম্পোনেন্টের উপর ভিত্তি করে কাজ করে।
Buffers হল Java NIO এর অন্যতম প্রধান কম্পোনেন্ট যা ডেটা সংরক্ষণ করে এবং channels এর মাধ্যমে ডেটা রিড বা রাইট করার জন্য ব্যবহৃত হয়। একটি buffer হল একটি container যা ডেটা ধারণ করতে পারে এবং যেখানে ডেটা এক্সেস করা হয়। বাফার সাধারণত primitive data types (যেমন byte
, char
, int
, float
, ইত্যাদি) ধারণ করতে সক্ষম।
byte
ডেটা ধারণ করে।char
ডেটা ধারণ করে।int
ডেটা ধারণ করে।float
ডেটা ধারণ করে।import java.nio.ByteBuffer;
public class BufferExample {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 1);
buffer.put((byte) 2);
buffer.flip(); // Position reset to 0, limit set to current position
// Reading from buffer
while (buffer.hasRemaining()) {
System.out.println(buffer.get()); // Output: 1 2
}
}
}
Channels হল NIO এর দ্বিতীয় প্রধান কম্পোনেন্ট যা data transfer এর মাধ্যমে I/O অপারেশন সম্পন্ন করে। চ্যানেলগুলো ডেটাকে সরাসরি buffers থেকে I/O devices (যেমন ফাইল, নেটওয়ার্ক সোকেট) তে পাঠায় বা সেখান থেকে পড়ে।
import java.nio.channels.FileChannel;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
public class ChannelExample {
public static void main(String[] args) {
try (FileInputStream fileInputStream = new FileInputStream("input.txt");
FileChannel channel = fileInputStream.getChannel()) {
ByteBuffer buffer = ByteBuffer.allocate(1024);
int bytesRead = channel.read(buffer);
while (bytesRead != -1) {
buffer.flip();
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get());
}
buffer.clear();
bytesRead = channel.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileChannel
ব্যবহার করে একটি ফাইল থেকে ডেটা পড়া হচ্ছে।ByteBuffer
ব্যবহার করে চ্যানেল থেকে ডেটা ক্যাচ করা হচ্ছে এবং সেই ডেটা আউটপুটে প্রিন্ট করা হচ্ছে।Selectors হল Java NIO এর একটি বিশেষ কম্পোনেন্ট যা non-blocking I/O অপারেশনগুলোকে পরিচালনা করার জন্য ব্যবহৃত হয়। এটি এক বা একাধিক চ্যানেলের উপর নজর রাখে এবং যদি কোন চ্যানেলে I/O অপারেশন করার জন্য ডেটা প্রস্তুত থাকে তবে তা সক্রিয় করে।
import java.nio.channels.*;
import java.nio.*;
import java.net.*;
import java.io.IOException;
public class SelectorExample {
public static void main(String[] args) {
try {
// Creating a Selector
Selector selector = Selector.open();
// Creating a ServerSocketChannel
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.bind(new InetSocketAddress(8080));
serverSocketChannel.configureBlocking(false);
// Registering the channel with the selector for ACCEPT events
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
// Selecting keys with events
if (selector.select() > 0) {
// Handle the selected keys
for (SelectionKey key : selector.selectedKeys()) {
if (key.isAcceptable()) {
// Accept the connection
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel client = server.accept();
System.out.println("Accepted connection from " + client.getRemoteAddress());
client.close();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
Java I/O (Input/Output) সিস্টেমে দুটি প্রধান পদ্ধতি রয়েছে: Traditional I/O (Blocking I/O) এবং NIO (New I/O)। Java NIO (New I/O) Java 1.4 থেকে চালু হয়েছিল এবং এটি Traditional I/O এর তুলনায় আরও আধুনিক এবং দ্রুত I/O অপারেশন প্রদান করে।
এখানে Traditional I/O এবং NIO এর মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য আলোচনা করা হয়েছে:
বিষয় | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
Design | সাধারণত Stream-based I/O। | Buffer-based I/O (Data is read/written into buffers). |
Threading | I/O অপারেশন থ্রেড ব্লক করে, যা থ্রেডকে এক্সিকিউট করতে বাধা দেয়। | Non-blocking I/O সাপোর্ট করে, একাধিক অপারেশন একই থ্রেডে একসাথে পরিচালনা করা যায়। |
Blocking I/O | Yes, ডেটা পড়া বা লেখা থ্রেডকে ব্লক করে রাখে। | No, Non-blocking I/O। |
বিষয় | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
Performance | অনেক সময় থ্রেড ব্লক হয়ে যাওয়ায় I/O অপারেশন ধীর হতে পারে। | NIO প্যারালাল অপারেশন সাপোর্ট করে, যা দ্রুত I/O অপারেশন নিশ্চিত করে। |
Concurrency | একটি থ্রেড একে একে অপারেশন করতে বাধ্য হয়। | Multiple channels can be managed concurrently in a non-blocking fashion. |
Efficiency | থ্রেডের জন্য বেশি রিসোর্স প্রয়োজন, যা ইফিসিয়েন্সি কমাতে পারে। | NIO কম রিসোর্স ব্যবহার করে, এবং একাধিক I/O অপারেশন পরিচালনা করতে পারে। |
বিষয় | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
Buffering | Typically uses a byte/character stream with minimal buffering. | NIO uses Buffers to store data before reading/writing. |
Memory Allocation | Stream-based I/O may need to allocate memory dynamically. | Memory-mapped buffers provide more control over memory allocation. |
বিষয় | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
Flexibility | Less flexible, mainly focuses on one I/O stream at a time. | More flexible, handles multiple channels, files, and non-blocking I/O efficiently. |
Scalability | Less scalable for handling a large number of I/O operations concurrently. | NIO is highly scalable, supports multiplexing and asynchronous I/O. |
বিষয় | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
Main Components | Streams (InputStream , OutputStream , Reader , Writer ) | Buffers, Channels, Selectors |
Buffer | Not used directly in Traditional I/O. | Buffers are central for NIO, storing data for reading/writing. |
Channels | Not present in Traditional I/O. | Channels handle the I/O operations and interact with buffers. |
Selectors | Not available in Traditional I/O. | Selectors allow non-blocking I/O multiplexing (e.g., handling multiple channels). |
বিষয় | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
File Handling | Uses FileInputStream and FileOutputStream to read/write files. | Uses FileChannel , Files , and **FileInputStream /FileOutputStream for enhanced file operations. |
File Attributes | Limited file attribute handling. | NIO supports advanced file operations (e.g., Files , Paths , FileChannel ). |
Aspect | Traditional I/O (Blocking I/O) | NIO (New I/O) |
---|---|---|
Stream vs. Buffer | Based on streams (character or byte-based). | Based on buffers (data is transferred in buffers). |
Blocking vs. Non-blocking | Blocks the thread while waiting for I/O operations. | Non-blocking, allows asynchronous operations. |
Thread Management | Each I/O operation requires a dedicated thread. | Multiple I/O operations can be handled in a single thread (with selectors). |
Concurrency | Less efficient for high-concurrency systems. | Better suited for scalable, high-concurrency systems. |
I/O Model | Simple but not efficient for high loads. | Efficient for handling large numbers of I/O operations. |
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TraditionalIOExample {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("source.txt");
FileOutputStream fos = new FileOutputStream("destination.txt");
int byteData;
while ((byteData = fis.read()) != -1) {
fos.write(byteData);
}
fis.close();
fos.close();
System.out.println("File copied using Traditional I/O");
}
}
import java.nio.file.*;
import java.nio.channels.*;
import java.io.IOException;
public class NIOExample {
public static void main(String[] args) throws IOException {
Path source = Paths.get("source.txt");
Path destination = Paths.get("destination.txt");
try (FileChannel sourceChannel = FileChannel.open(source, StandardOpenOption.READ);
FileChannel destinationChannel = FileChannel.open(destination, StandardOpenOption.WRITE, StandardOpenOption.CREATE)) {
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
System.out.println("File copied using NIO");
}
}
}
NIO আধুনিক high-performance systems এবং concurrent applications-এর জন্য আদর্শ, কারণ এটি কম রিসোর্সে বেশি কার্যকারিতা প্রদান করে এবং প্যারালাল অপারেশন সহজ করে তোলে।
Read more